/*
 *********************************************************************************
 * Authors: narsil <ygk@ebidding.com.cn> 2014-08-13 49206C6F766520636F6E74726F6C *
 *********************************************************************************
 */
package com.example.demo.common.config.service;


import com.example.demo.common.exception.EbsException;
import com.example.demo.common.persistence.dao.SysConfigMapper;
import com.example.demo.common.persistence.model.SysConfig;
import com.example.demo.core.cache.CacheManager;
import com.example.demo.core.util.SpringContextHolder;
import com.example.demo.core.util.WebUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ConfigServiceImpl implements ConfigService {
	
	@Autowired
	private SysConfigMapper sysConfigMapper;
	
	/**
	 * 作者：闫广坤
	 * 创建时间：2014-12-09 上午11:08:45
	 * 方法描述：非注解方式获取实例。
	 * @return
	 */
	public static ConfigServiceImpl getInstance() {
		
		return SpringContextHolder.getBean(ConfigServiceImpl.class);
	}
	
	/**
	 * 作者：闫广坤
	 * 创建时间：2014-12-09 上午11:20:27
	 * 方法描述：通过key，获取配置项的值。
	 * @param key 。
	 * @return 配置项的值。
	 */
	public String getString(String key) {
		 
		try {
			String value = "";
			
			if(CacheManager.isInit()) {
				value = CacheManager.get("sys_config_" +key);
				
				if(StringUtils.equalsIgnoreCase("-1", value)) 
					return null;
				if(StringUtils.isNotEmpty(value)) 
					return value;
			}
			
			SysConfig sysConfig = sysConfigMapper.selectByConfigKey(key, getConfigPrefix());
			if(sysConfig == null) {
				value = "";
			} else {
				value = sysConfig.getConfigValue();
			}
			
			if(CacheManager.isInit()) {
				if(StringUtils.isEmpty(value)) {
					CacheManager.set("sys_config_" +key,"-1");
				} else {
					CacheManager.set("sys_config_" +key,value);
				}
			}
			return value;
		} catch(Exception e) {
			e.printStackTrace();
			throw new EbsException("ebidding_config_noexists_exception",key);
		}
	}
	
	/**
	 * 作者：闫广坤
	 * 创建时间：2014-12-09 上午11:21:31
	 * 方法描述：通过key，获取配置项的值。
	 * @param key 
	 * @param defaultValue 找不到时的默认值。
	 * @return 配置项的值。
	 */
	public String getString(String key,String defaultValue) {
		
		try {
			String value = "";
			
			if(CacheManager.isInit()) {
				value = CacheManager.get("sys_config_" +key);
				if(StringUtils.isNotEmpty(value)) 
					return value;
			}
			
			SysConfig sysConfig = sysConfigMapper.selectByConfigKey(key, getConfigPrefix());
			if(sysConfig == null) {
				value = "";
			} else {
				value = sysConfig.getConfigValue();
			}
			
			if(StringUtils.isBlank(value)) return defaultValue;
			
			if(CacheManager.isInit()) {
				CacheManager.set("sys_config_" +key,sysConfig.getConfigValue());
			}
			return value;
		} catch(Exception e) {
			throw new EbsException(e);
		}
	}

	public String getNodeName() {
		
		if(StringUtils.isEmpty(WebUtil.nodeName)) 
			WebUtil.nodeName = "ebidding";
		return WebUtil.nodeName;
	}
 
	public String getConfigPrefix() {
		if(StringUtils.isEmpty(WebUtil.configPrefix))
			WebUtil.configPrefix = "local";
		return WebUtil.configPrefix;
	} 
}

